home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-2.iso / extra_2 / flmgmtcl.zip / FILE.CPP < prev    next >
C/C++ Source or Header  |  1995-11-02  |  8KB  |  313 lines

  1. // ==========================================================================
  2. //                             Class Implementation : CFileSpec
  3. // ==========================================================================
  4.  
  5. // Source file : file.cpp
  6.  
  7. // Source : Periphere NV (R.Mortelmans)
  8. // Creation Date :        2nd November. 1995
  9. // Last Modification : 2nd November. 1995
  10.                           
  11. // //////////////////////////////////////////////////////////////////////////
  12.  
  13. #include "stdafx.h"        // standard MFC include
  14. #include "file.h"        // class specification
  15.  
  16. #include <direct.h>        // For directory functions (getdcwd(), ...)
  17. #include <stdlib.h>        // For constant definitions  (_MAX_DIR, ...)
  18. #include <string.h>        // For string search  (strspn, ...)
  19.  
  20. #ifdef _DEBUG
  21. #undef THIS_FILE
  22. static char BASED_CODE THIS_FILE[] = __FILE__;
  23. #endif
  24.  
  25. #include "filelmt.h"    // for invalid chars
  26.  
  27. IMPLEMENT_DYNAMIC(CFileSpec, CObject)
  28.  
  29. #define new DEBUG_NEW
  30.  
  31. /////////////////////////////////////////////////////////////////////////////
  32. // Definition of static members
  33.  
  34.  
  35. // Data members -------------------------------------------------------------
  36. // protected:
  37.  
  38. // private:
  39.     // CString m_sFileName;
  40.     // --- The file name of the file 
  41.     //     (everything behind the last full stop is the extender-part)
  42.  
  43.     // CTime m_time;
  44.     // --- Date and time of last modification
  45.     // LONG m_lnLength;
  46.     // --- File size in bytes
  47.     // Attribute m_eAttributes;
  48.     // --- DOS attributes (see enum Attribute of MFC)
  49.  
  50. // Member functions ---------------------------------------------------------
  51. // public:
  52.  
  53. CFileSpec::CFileSpec()
  54.     :
  55.     m_sFileName(TEXT("")),
  56.     m_time(),
  57.     m_lnLength(0),
  58.     m_eAttributes(CFile::normal)
  59.     {
  60.     }
  61.     
  62. CFileSpec::CFileSpec(const char* pszFileName)
  63.     {
  64.     // ... Must be valid pointer
  65.     ASSERT(pszFileName != NULL);
  66.     if (!SetFileName(pszFileName))
  67.         {
  68.         TRACE(TEXT("CFileSpec::CFileSpec : An invalid file name (%s) was specified, clearing object\n"),
  69.             pszFileName);
  70.         SetFileName(TEXT(""));
  71.         }
  72.     }
  73.     
  74. CFileSpec::CFileSpec(const CFileSpec& fileSrc)
  75.     :
  76.     m_sFileName(fileSrc.m_sFileName)
  77.     {
  78.     }
  79.     
  80. const CFileSpec& CFileSpec::operator=(const CFileSpec& fileSrc)
  81.     {
  82.     m_sFileName = fileSrc.m_sFileName;
  83.     return *this;
  84.     }
  85.     
  86. CString CFileSpec::GetBaseName() const
  87.     {
  88.     int nFullStopPosition;
  89.     if ((nFullStopPosition = m_sFileName.ReverseFind('.')) != -1)
  90.         return m_sFileName.Left(nFullStopPosition);
  91.     else
  92.         return m_sFileName;
  93.     }
  94.     
  95. BOOL CFileSpec::SetBaseName(const char* pszBaseName)
  96.     {
  97.     // ... Must be valid pointer
  98.     ASSERT(pszBaseName != NULL);
  99.     CString sFileName(pszBaseName);
  100.     CString sExtender(GetExtender());
  101.     sFileName.MakeLower();
  102.     if ((int)strcspn(sFileName, INVALID_W_FILE_CHARS) != sFileName.GetLength())
  103.         {
  104.         TRACE(TEXT("CFileSpec::SetBaseName : Basename (%s) contains illegal characters\n"), pszBaseName);
  105.         return FALSE;
  106.         }
  107.     m_sFileName = sFileName;
  108.     if (!sExtender.IsEmpty())
  109.         m_sFileName += '.' + sExtender;
  110.     return TRUE;
  111.     }
  112.     
  113. void CFileSpec::ForceSetBaseName(const char* pszBaseName)
  114.     {
  115.     // ... Must be valid pointer
  116.     ASSERT(pszBaseName != NULL);
  117.     CString sFileName(pszBaseName);
  118.     CString sExtender(GetExtender());
  119.     if (!sExtender.IsEmpty())
  120.         sFileName = sFileName + '.' + sExtender;
  121.     ForceSetFileName(sFileName);
  122.     }
  123.     
  124. CString CFileSpec::GetExtender() const
  125.     {
  126.     int nFullStopPosition;
  127.     if ((nFullStopPosition = m_sFileName.ReverseFind('.')) != -1)
  128.         return m_sFileName.Mid(nFullStopPosition + 1);
  129.     else
  130.         return TEXT("");
  131.     }
  132.     
  133. BOOL CFileSpec::SetExtender(const char* pszExtender)
  134.     {
  135.     // ... Must be valid pointer
  136.     ASSERT(pszExtender != NULL);
  137.     CString sFileName(GetBaseName());
  138.     CString sExtender(pszExtender);
  139.     sExtender.MakeLower();
  140.     if ((int)strcspn(sExtender, INVALID_W_FILE_CHARS) != sExtender.GetLength())
  141.         {
  142.         TRACE(TEXT("CFileSpec::SetExtender : Extender (%s) contains illegal characters\n"), pszExtender);
  143.         return FALSE;
  144.         }
  145.     if (!sExtender.IsEmpty())
  146.         sFileName += '.' + sExtender;
  147.     if (sFileName.GetLength() > MAX_FILE_NAME_LENGTH)
  148.         {
  149.         TRACE(TEXT("CFileSpec::SetExtender : Setting extender would make file name too long (%)\n"), sFileName.GetLength());
  150.         return FALSE;
  151.         }
  152.     m_sFileName = sFileName;
  153.     return TRUE;
  154.     }
  155.  
  156. void CFileSpec::ForceSetExtender(const char* pszExtender)
  157.     {
  158.     // ... Must be valid pointer
  159.     ASSERT(pszExtender != NULL);
  160.     CString sFileName(GetBaseName());
  161.     if (*pszExtender != '\0')
  162.         sFileName = sFileName + '.' + pszExtender;
  163.     ForceSetFileName(sFileName);
  164.     }
  165.     
  166. CString CFileSpec::GetFileName() const
  167.     {
  168.     return m_sFileName;
  169.     }
  170.     
  171. BOOL CFileSpec::SetFileName(const char* pszFileName)
  172.     {
  173.     // ... Must be valid pointer
  174.     ASSERT(pszFileName != NULL);
  175.     if ((int)strcspn(pszFileName, INVALID_W_FILE_CHARS) != strlen(pszFileName))
  176.         {
  177.         TRACE(TEXT("CFileSpec::SetFileName : File name (%s) contains illegal characters\n"), pszFileName);
  178.         return FALSE;
  179.         }
  180.     if (strlen(pszFileName) > MAX_FILE_NAME_LENGTH)
  181.         {
  182.         TRACE(TEXT("CFileSpec::SetFileName : File name too long (%u)\n"), strlen(pszFileName));
  183.         return FALSE;
  184.         }
  185.     m_sFileName = pszFileName;
  186.     m_sFileName.MakeLower();
  187.     return TRUE;
  188.     }
  189.     
  190. void CFileSpec::ForceSetFileName(const char* pszFileName)
  191.     {
  192.     // ... Must be valid pointer
  193.     ASSERT(pszFileName != NULL);
  194.     CString sFileName(pszFileName);
  195.     int nIndexWrongChar;
  196.     while ((nIndexWrongChar = (int)strcspn(sFileName, INVALID_W_FILE_CHARS)) != sFileName.GetLength())
  197.         {
  198.         sFileName = sFileName.Left(nIndexWrongChar) + sFileName.Mid(nIndexWrongChar + 1);
  199.         }
  200.     if (sFileName.GetLength() > MAX_FILE_NAME_LENGTH)
  201.         sFileName = sFileName.Left(MAX_FILE_NAME_LENGTH);
  202.     sFileName.MakeLower();
  203.     VERIFY(SetFileName(sFileName));
  204.     }
  205.     
  206. CTime CFileSpec::GetTime() const
  207.     {
  208.     return m_time;
  209.     }
  210.     
  211. BOOL CFileSpec::SetTime(CTime time)
  212.     {
  213.     m_time = time;
  214.     return TRUE;
  215.     }
  216.     
  217. LONG CFileSpec::GetLength() const
  218.     {
  219.     return m_lnLength;
  220.     }
  221.     
  222. BOOL CFileSpec::SetLength(LONG lnLength)
  223.     {
  224.     if (0 <= lnLength)
  225.         {
  226.         m_lnLength = lnLength;
  227.         return TRUE;
  228.         }
  229.     else
  230.         {
  231.         TRACE(TEXT("CFileSpec::SetLength : Invalid length : %ln\n"), lnLength);
  232.         return FALSE;
  233.         }
  234.     }
  235.     
  236. BYTE CFileSpec::GetAttributes() const
  237.     {
  238.     return m_eAttributes;
  239.     }
  240.     
  241. BOOL CFileSpec::SetAttributes(CFile::Attribute attributes)
  242.     {
  243.     m_eAttributes = attributes;
  244.     return TRUE;
  245.     }
  246.  
  247. BOOL CFileSpec::IsEmpty() const
  248.     {
  249.     return GetFileName().IsEmpty();
  250.     }
  251.     
  252. void CFileSpec::Empty() 
  253.     {
  254.     m_sFileName.Empty();
  255.     }
  256.     
  257. BOOL CFileSpec::operator==(CFileSpec fileSpec) const
  258.     {
  259.     return (m_sFileName == fileSpec.m_sFileName);
  260.     }
  261.     
  262. BOOL CFileSpec::operator!=(CFileSpec fileSpec) const
  263.     {
  264.     return (m_sFileName != fileSpec.m_sFileName);
  265.     }
  266.     
  267. BOOL CFileSpec::operator<=(CFileSpec fileSpec) const
  268.     {
  269.     return (m_sFileName <= fileSpec.m_sFileName);
  270.     }
  271.     
  272. BOOL CFileSpec::operator<(CFileSpec fileSpec) const
  273.     {
  274.     return (m_sFileName < fileSpec.m_sFileName);
  275.     }
  276.     
  277. BOOL CFileSpec::operator>=(CFileSpec fileSpec) const
  278.     {
  279.     return (m_sFileName >= fileSpec.m_sFileName);
  280.     }
  281.     
  282. BOOL CFileSpec::operator>(CFileSpec fileSpec) const
  283.     {
  284.     return (m_sFileName > fileSpec.m_sFileName);
  285.     }
  286.     
  287.  
  288. #ifdef _DEBUG
  289. void CFileSpec::Dump(CDumpContext& dc) const
  290.     {
  291.     CObject::Dump(dc);
  292.     dc << TEXT("\nm_sFileName : ") << m_sFileName;
  293.     dc << TEXT("\nm_time : ") << m_time;
  294.     dc << TEXT("\nm_lnLength : ") << m_lnLength;
  295.     dc << TEXT("\nm_eAttributes : ") << m_eAttributes;
  296.     }
  297.  
  298. void CFileSpec::AssertValid() const
  299.     {
  300.     CObject::AssertValid();
  301.     }
  302. #endif
  303.  
  304. CFileSpec::~CFileSpec()
  305.     {
  306.     }
  307.     
  308. // protected:
  309.  
  310. // private:
  311.  
  312. // ==========================================================================
  313.